在JavaScript中，自定义对象是用于存储键值对的数据结构。对象可以包含属性（数据）和方法（函数）。以下是如何创建和操作自定义对象的详细说明。

### 1. 创建对象

#### 使用对象字面量

这是最常见和简洁的方式。

**语法：**
```javascript
const objectName = {
    key1: value1,
    key2: value2,
    key3: value3,
    methodName: function() {
        // 方法体
    }
};
```

**示例：**
```javascript
const person = {
    firstName: "Alice",
    lastName: "Smith",
    age: 25,
    greet: function() {
        return "Hello, my name is " + this.firstName + " " + this.lastName;
    }
};

console.log(person.firstName); // 输出: Alice
console.log(person.greet()); // 输出: Hello, my name is Alice Smith
```

#### 使用`new Object()`语法

这是另一种创建对象的方式，但不如对象字面量常用。

**语法：**
```javascript
const objectName = new Object();
objectName.key1 = value1;
objectName.key2 = value2;
objectName.methodName = function() {
    // 方法体
};
```

**示例：**
```javascript
const person = new Object();
person.firstName = "Bob";
person.lastName = "Johnson";
person.age = 30;
person.greet = function() {
    return "Hello, my name is " + this.firstName + " " + this.lastName;
};

console.log(person.lastName); // 输出: Johnson
console.log(person.greet()); // 输出: Hello, my name is Bob Johnson
```

### 2. 访问对象属性

#### 点符号（`.`）

**语法：**
```javascript
objectName.key;
```

**示例：**
```javascript
console.log(person.firstName); // 输出: Alice
```

#### 方括号符号（`[]`）

**语法：**
```javascript
objectName["key"];
```

**示例：**
```javascript
console.log(person["lastName"]); // 输出: Smith
```

### 3. 修改对象属性

可以直接通过点符号或方括号符号修改对象的属性。

**示例：**
```javascript
person.age = 26;
console.log(person.age); // 输出: 26

person["firstName"] = "Alicia";
console.log(person.firstName); // 输出: Alicia
```

### 4. 添加新属性

可以通过点符号或方括号符号向对象添加新属性。

**示例：**
```javascript
person.email = "alice@example.com";
console.log(person.email); // 输出: alice@example.com

person["address"] = "123 Main St";
console.log(person.address); // 输出: 123 Main St
```

### 5. 删除属性

使用`delete`关键字删除对象的属性。

**语法：**
```javascript
delete objectName.key;
```

**示例：**
```javascript
delete person.age;
console.log(person.age); // 输出: undefined

delete person["email"];
console.log(person.email); // 输出: undefined
```

### 6. 对象方法

对象的方法是存储在对象中的函数。可以通过点符号或方括号符号调用。

**示例：**
```javascript
const person = {
    firstName: "Alice",
    lastName: "Smith",
    age: 25,
    greet: function() {
        return "Hello, my name is " + this.firstName + " " + this.lastName;
    }
};

console.log(person.greet()); // 输出: Hello, my name is Alice Smith
```

### 7. 使用构造函数创建对象

构造函数是一种特殊的函数，用于创建对象实例。构造函数的名称通常以大写字母开头。

**语法：**
```javascript
function ConstructorName(key1, key2, key3) {
    this.key1 = key1;
    this.key2 = key2;
    this.key3 = key3;
    this.methodName = function() {
        // 方法体
    };
}
```

**示例：**
```javascript
function Person(firstName, lastName, age) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
    this.greet = function() {
        return "Hello, my name is " + this.firstName + " " + this.lastName;
    };
}

const person1 = new Person("Alice", "Smith", 25);
const person2 = new Person("Bob", "Johnson", 30);

console.log(person1.greet()); // 输出: Hello, my name is Alice Smith
console.log(person2.greet()); // 输出: Hello, my name is Bob Johnson
```

### 8. 使用`class`语法创建对象

ES6引入了`class`语法，使对象的创建和继承更加清晰和简洁。

**语法：**
```javascript
class ClassName {
    constructor(key1, key2, key3) {
        this.key1 = key1;
        this.key2 = key2;
        this.key3 = key3;
    }
    methodName() {
        // 方法体
    }
}
```

**示例：**
```javascript
class Person {
    constructor(firstName, lastName, age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }
    greet() {
        return "Hello, my name is " + this.firstName + " " + this.lastName;
    }
}

const person1 = new Person("Alice", "Smith", 25);
const person2 = new Person("Bob", "Johnson", 30);

console.log(person1.greet()); // 输出: Hello, my name is Alice Smith
console.log(person2.greet()); // 输出: Hello, my name is Bob Johnson
```

### 9. 对象属性和方法的遍历

可以使用`for...in`循环遍历对象的属性。

**示例：**
```javascript
const person = {
    firstName: "Alice",
    lastName: "Smith",
    age: 25
};

for (let key in person) {
    console.log(key + ": " + person[key]);
}
// 输出:
// firstName: Alice
// lastName: Smith
// age: 25
```

### 10. 对象的内置方法

JavaScript对象有许多内置方法，如`Object.keys()`、`Object.values()`、`Object.entries()`等。

**示例：**
```javascript
const person = {
    firstName: "Alice",
    lastName: "Smith",
    age: 25
};

console.log(Object.keys(person)); // 输出: ["firstName", "lastName", "age"]
console.log(Object.values(person)); // 输出: ["Alice", "Smith", 25]
console.log(Object.entries(person)); // 输出: [["firstName", "Alice"], ["lastName", "Smith"], ["age", 25]]
```

### 总结

- **创建对象**：使用对象字面量或`new Object()`语法。
- **访问属性**：使用点符号或方括号符号。
- **修改属性**：直接通过点符号或方括号符号修改。
- **添加新属性**：通过点符号或方括号符号添加。
- **删除属性**：使用`delete`关键字删除。
- **对象方法**：存储在对象中的函数。
- **构造函数**：用于创建对象实例。
- **`class`语法**：ES6引入的简洁对象创建方式。
- **遍历属性**：使用`for...in`循环。
- **内置方法**：如`Object.keys()`、`Object.values()`、`Object.entries()`等。

掌握这些概念和方法，可以帮助你更有效地创建和操作JavaScript对象。